# 文本词频统计
import re


def word_count(text):
    # 使用正则表达式去掉标点符号和换行符
    re.sub(r'[^\w ]', ' ', text)

    # 统一转换成小写
    text = text.lower()

    # 按照空格分隔,获取所有单词列表
    word_list = text.split(' ')

    # 去除空白单词
    word_list = filter(None, word_list)

    # 生成词频字典 key=单词 value=单词出现的频率
    word_count = {}
    for w in word_list:
        if w not in word_count.items():
            word_count[w] = 0
        word_count[w] += 1

    # 按照词频排序后返回
    sorted_word_count = sorted(word_count.items(), key=lambda kv: kv[1], reverse=True)
    return sorted_word_count


if __name__ == '__main__':
    # 以读模式打开文件,读取文件内容作为输入
    with open('in.txt', 'r') as fin:
        text = fin.read()

    # 统计词频
    word_count = word_count(text)

    # 以写模式打开文件,将词频统计结果作为输出写入文件
    with open('out.txt', 'w') as fout:
        for k, v in word_count:
            fout.write(f'{k} : {v}\n')
